Memory systems and devices including examples of generating access codes for memory regions using authentication logic

ABSTRACT

Examples of systems and method described herein or generating, in a memory controller and/or memory device, access codes for memory regions of the memory device using authentication logic, and for accessing the memory device using the access codes. For example, a memory controller and/or a coupled memory device may generate access codes that a host computing device may include in a memory access request to access one or more memory regions of the memory device. Data read or written at the memory device may in some examples only be accessed in accordance with the access codes for memory regions of the memory device. Accordingly, the systems and methods described herein may provide security for specific memory regions of a memory device because the access code are updated periodically (e.g., based on obtained reset indication) or in accordance with an updated count value from a counter.

TECHNICAL FIELD

Embodiments of the disclosure relate generally to memory, and more particularly, in one or more of the illustrated embodiments, to generate access code for memory regions of a memory device using authentication logic, including using the access codes to access the memory device.

BACKGROUND

Emerging memory architectures are designed to handle a range of memory access requests and may include memories with different characteristics. For example, memory may include dynamic random-access memory (DRAM) and phase-change memory (PCM)). Non-volatile memories may be highly non-uniform. For example, certain NAND flash memories (e.g., based on page type) may be faster to read or write than others, with latencies changing as they wear out, or with different levels of cell (e.g., multi-level-cells (MLC)), among different NAND flash memories. Emerging memory architectures may also utilize non-volatile dual in-line memory modules (NVDIMMs), such as NVDIMM-P or NVDIMM-F, NVDIMMs generally include both a non-volatile and a volatile memory device. Non-volatile memory generally retains its contents even when power is temporarily or permanently removed, such as NAND memory. Volatile memory generally would lose its contents when power is permanently, or in some cases temporarily, removed from the device.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1A is a schematic illustration of a system arranged in accordance with examples described herein.

FIG. 1B is a schematic illustration of a memory system interacting in accordance with examples described herein.

FIG. 1C is a schematic illustration of a memory system interacting in accordance with examples described herein.

FIG. 2 is a schematic illustration of a method in accordance with examples described herein.

FIG. 3 is a schematic illustration of a method in accordance with examples described herein.

FIG. 4 is a schematic illustration of a method in accordance with examples described herein.

FIG. 5A is a schematic illustration of a memory system arranged in accordance with examples described herein.

FIG. 5B is a schematic illustration of a memory system arranged in accordance with examples described herein.

FIG. 6 is a schematic illustration of a memory system interacting in accordance with examples described herein.

FIG. 7 is a schematic illustration of a method in accordance with examples described herein.

FIG. 8 is a schematic illustration of a method in accordance with examples described herein.

FIG. 9 is a schematic illustration of a memory system arranged in accordance with examples described herein.

FIG. 10 is a schematic illustration of a method in accordance with examples described herein.

DETAILED DESCRIPTION

Memory devices may utilize error correction coding (ECC). Generally, error correction coding techniques may encode original data with additional encoded bits to secure the original bits which are intended to be stored, retrieved, and/or transmitted.

Cryptographic methods may use block ciphers to provide security for data, e.g., to authenticate data using a cryptographic key. For example, a cryptographic key may transform data from plaintext to ciphertext when encrypting; and vice-versa when decrypting. A block cipher provides a block transformation of information bits to encrypt (or conversely, to decrypt) data. For example, the Advanced Encryption Standard (AES) is a type of block cipher. Additionally, a block cipher may operate in different modes within a cryptographic device/method, e.g., as a “stream cipher” in which a counter is used. For example, the counter may be used as a basis to alter the underlying cryptographic key used by the block cipher, such that the cryptographic key changes over time; to, in turn, alter data in an encrypted stream of data. For example, Galois/Counter Mode (GCM) is a type of stream cipher.

It may be complex and cumbersome to secure NVDIMM devices.

Cryptographic methods may also use a hash-based message authentication code (HMAC), which also may use a cryptographic key to encrypt and decrypt data. For example, an HMAC, as implemented in a cryptography technique or method, may apply a cryptographic hash function that encrypts data into ciphertext using the cryptographic key. Hash functions can include SHA-2 or SHA-3. The security of the data, encrypted by an HMAC, is dependent on how secure the underlying cryptographic key is. For example, if a hacker were to acquire the cryptographic key, the data may be compromised because it could be decrypted with the cryptographic key known. Accordingly, there is a need to secure the integrity of data, e.g., if cryptographic keys were discovered or hacked.

Examples of systems and methods described herein provide for generating, in a memory controller and/or memory device, access codes for memory regions of the memory device using authentication logic, and for accessing the memory device using the access codes. Computing devices that regularly access memory devices may do so through a memory controller. For example, a host computing device may generate memory access requests which are routed through a memory controller that controls access to various coupled memory devices, Using the systems and methods described herein, a memory controller and/or a coupled memory device may generate access codes that a host computing device may include in a memory access request to access one or more memory regions of the memory device. For example, authentication logic of a memory controller may utilize a key (e.g., a Disk Encryption Key (DEK)) and a count value to generate the plurality of access codes for respective regions of a plurality of memory regions of the memory device.

The access codes may be generated in accordance with a hash based message authentication code (HMAC) using the provisioned key and the count value. Advantageously, the access code may be encrypted and may be used to provide authenticated access to specific memory regions of the memory device to access data associated with the memory access request. Accordingly, data read or written by a host computing device to various memory regions of a memory device may be accessed in an authenticated manner, e.g., using the generated access codes that are encrypted. For example, the data read or written may only be accessed in accordance with the access codes, similar to a cryptographic key for the data read or written, for memory regions of the memory device (e.g., a NAND memory device). In the example, the authentication logic of the memory controller and/or access logic at the memory device may compare a stored access code (e.g., at a local cache) to determine whether an access code obtained with a memory access request is a match, before performing a memory access operation associated with the memory access request.

Additionally and advantageously, the generated access code may provide security for the data read or written memory regions of a memory device. In the example implementation, of the generated access codes being stored in a local cache, the access codes may be updated periodically, e.g., if a reset indication is obtained at the memory controller and memory device. Accordingly, if a hacker were to eavesdrop on or hack one or more of the generated access codes, other regions of memory (e.g., regions of the same memory device) may remain secure, as only the discovered or hacked access codes would be compromised. Further additionally and advantageously, the systems and methods described herein may provide security for specific memory regions of a memory device because the access code are updated periodically (e.g., based on obtained reset indication) or in accordance with an updated count value from a counter.

Additionally or alternatively, a memory controller provides address translations for memory addresses in memory access requests from another computing device (e.g., a host computing device). As described herein, advantageously, a memory controller may at least partially concurrently process (e.g., at least partially in parallel) address translation while also generating the encrypted access code, thereby improving processing speed of memory access requests at a memory controller which also utilizes encrypted access codes. Address translation by the memory controller may also include other aspects of memory control by the memory controller, such as memory wear leveling, garbage collection, and write amplification. In some implementations where memory devices are implemented using NAND memory devices, write latency for address translation may include erase operations, e.g., erase NAND memory cells prior to writing to those memory cells. Advantageously, encrypting the access code for secure data may occur in parallel to address translation for a NAND memory device (e.g., a read or write operation). Accordingly, in contrast to a memory controller which may address translate and encrypt access codes in sequence, examples of systems and methods described herein may improve processing speed of memory access requests at a memory controller because address translation and generating of access codes may occur at least partially in parallel.

Further, the systems and methods described herein may provide for error correction, which may be used in memory controllers coupled to nonvolatile memory devices (e.g., a NAND memory device). Advantageously, the error correction may also be performed subsequent to address translation for a write operation (or prior to address translation for a read operation) to improve processing speed of memory access requests at a memory controller; while the memory controller also generates the encrypted access code, thereby improving processing speed of memory access requests at a memory controller. For example, because encrypting an access code may incur a specific latency, depending on the authenticated stream cipher utilized, error correction of the data in the memory access request may also be performed at least partially in parallel to that encryption of the access code. Accordingly, in contrast to a memory controller which may error correct data of memory access requests and encrypt access codes in sequence, examples of systems and methods described herein may improve processing speed of memory access requests at a memory controller that utilizes stream ciphers because error correcting and generating of access codes may occur at least partially in parallel.

FIG. 1A is a schematic illustration of a system 100 arranged in accordance with examples described herein. System 100 includes a host computing device 104 coupled to memory controller 102, which may control one or more memory devices 112. In some examples, the memory controller 102 is embodied in or is an element of the host computing device 104. In such cases, the host computing device 104 may be a SOC, CPU, CPU, FPGA, or the like, and the memory controller 102 may be logic, circuitry, or a component of such a SOC, CPU, GPU, or FPGA. In some examples, the host computing device 104 is one physical device and the memory controller 102 is a separate physical device (e.g., each may be chiplets in a system of chiplets). In some cases, memory controller 102 and memory devices 112 are elements of a module (e.g., a DIMM, card, or drive) and the host computing device 104 is a separate processor.

Memory controller 102 may include a host interface 114 which may couple to a host bus 122 for connection to the host computing device 104. The host interface 114 is coupled to and/or may be implemented using a processor 106 or processing resource, which may be an SOC, ASIC, FPGA, or the like, and may be separate from or an element of host computing device 104 (as described above). The processor 106 may include authentication logic 108 and translation logic 110. The host interface 114 and the processor 106 may also be coupled to the cache 116 via internal memory controller buses, for example. The processor 106 is coupled to memory devices 112 via memory interface 118 and respective memory buses 124. The memory interface 118 is also coupled to the cache 116, e.g., also via an internal memory controller bus. The cache 116 is coupled to error correction logic 120 that may perform error correction on data communicated to/from the cache 116.

The memory devices 112 may store data retrieved by and/or for access by host computing device 104. As an example, in operation, the host computing device 104 may process datasets (e.g., image or content datasets) for use by one or more neural networks hosted on host computing device 104. A dataset may be stored on the memory devices 112. For example, the processor 106 may obtain, over the host bus 122, the dataset from one or more memory devices 112. The memory devices 112 may be included in and/or may store data for one or more computing devices, such as but not limited to, computing devices in a data center or a personal computing device. The processor 106 may store the dataset (e.g., images) in one or more of the memory devices 112 (e.g., the dataset may be distributed among the memory devices 112). The processor 106 may store discrete units of the dataset (e.g., images or video frames) the memory devices 112.

The memory devices 112 may store and provide information (e.g., data and instructions) responsive to memory access requests received from the memory controller 102, e.g., memory access requests routed or processed by processor 106 from host computing device 104. In operation, the memory devices 112 may process memory access requests to store and/or retrieve information based on memory access requests. For example, the host computing device 102 may include a host processor which may execute a user application requesting stored data and/or stored instructions at memory devices 112. (and/or to store data/instructions). When executed, the user application may generate a memory access request to access data or instructions in the memory devices 112. Generally, a memory access request can be or include a command and an address, for example, a memory command and a memory address. In various implementations, the memory access request may be or include a command and an address for a read operation, a write operation, an activate operation, or a refresh operation at the memory devices 112. Generally, a received command and address may facilitate the performance of memory access operations at the memory devices 112, such as read operations, write operations, activate operations, and/or refresh operations for the memory devices 112. Accordingly, the memory access request may be or include a memory address(s) for one or more of the memory devices 112. In the example of a write operation, the memory access request may also include data, e.g., in addition to the command and the address. The memory access requests from the host computing device 104 are provided to the processor 106 via the host bus 122.

Upon receiving one or more memory access requests for the memory devices 112 at the processor 106, the memory controller 102 may utilize the memory address as an initialization vector for an authenticated stream cipher to generate an access code, e.g., using authentication logic 108. At least partially concurrently (e.g., in parallel or overlapping in processing time at the memory controller 102), the memory controller 102 may perform error correction on data associated with the memory access request to generate error-corrected data, e.g., using error correction logic 120. Additionally or alternatively, also at least partially concurrently to utilizing the memory address as an initialization vector for an authenticated stream cipher, the memory controller 102 may perform address translation using the memory access request (e.g., a command and an address) to translate a logical memory address to a physical memory address. For example, the memory address in the memory address request may be a logical address, e.g., as known to the user application executing at the host computing device 104. The memory controller 102 may be configured to translate, using translation logic 110, that memory address to a physical address of one of the memory devices 112.

To process a memory access request at the processor 106 of the memory controller 102, the memory controller 102 may perform address translation based on the memory access request including a command and an address, e.g., responsive to receiving the command and/or the address. Accordingly, the translation logic 110 may use a look-gip table (e.g., a block table) to translate the memory address, as a logical memory address, to a physical memory address of one of the memory devices 112. The translation logic 110 may also perform operations associated with address translations of a memory controller 102, such as memory wear leveling, garbage collection, and/or write amplification. For example, to perform operations associated with garbage collection, the translation logic 110 may use a bad block look-up table stored at the cache 116 to identify the bad blocks of the memory devices 112, such that read and write operations may not be performed at physical memory addresses associated with the bad blocks of the memory devices 112. Accordingly, the translation logic 110 may perform address translation operations associated with translating logical memory address to physical memory addresses in the memory controller 102.

Additionally or alternatively, in processing memory access requests at processor 106 of the memory controller 102, the memory controller 102 may perform error correction for data associated with the memory access request using error correction logic 120, e.g., responsive to receiving the command and/or the address, For example, in the context of a write operation, the processor 106 may control error correction of data associated with the memory access request using error correction logic 120, after performing address translation using translation logic 110. Optionally, as will be described in more detail, error correction for data associated with a write operation may also occur, using error correction logic 120, after the data has been encrypted in accordance with a generated access code. In the context of a read operation, the processor 106 may control error correction data read from the memory devices 112 for the memory access requests at error correction logic 120, after the data has been decrypted in accordance with a generated access code. Optionally, as will be described in more detail, error correction for data associated with a read operation may also occur, using the error correction logic 120, after a physical memory address of the read data has been translated to a logical memory address for the memory address request and prior to decryption of the read data itself.

Whether a read or write operation, error correction logic 120 may error correct data associated with that operation. The error correction logic 120 may error correct data or information obtained from the memory devices 112. For example, error correction logic 120 may error correct data in accordance with a desired bit error rate (BER) of operation for the memory devices 112. For example, error correction logic 120 may include low-density parity-check correction logic that may error correct data in accordance with a low-density parity-check (LDPC) code. Accordingly, the error correction logic 120 may include a LDPC encoder. Additionally or alternatively, the error correction logic 120 may include a single parity check (SPC) encoder, and/or an algebraic error correction circuit such as one of the group including a Bose-Chaudhuri-Hocquenghem (BCH) encoder and/or a Reed Solomon ECC encoder, among other types of error correction circuits. In utilizing error correction logic 120, the memory controller 102 may correct errors that may occur to data during memory retrieval from or storage at memory devices 112. A desired BER may be specified by the host computing device 104 or a user executing a user application at the host computing device 104.

The error correction logic 120 may be implemented using discrete components such as an application specific integrated circuit (ASIC) or other circuitry, or the components may reflect functionality provided by circuitry within the memory controller 102 that does not necessarily have a discrete physical form separate from other portions of the memory controller 102. Although illustrated as a component within the memory controller 120 in FIG. 1A, the error correction logic 120 may be external to the memory controller 102 or have a number of components located within the memory controller 102 and a number of components located external to the memory controller 102.

In operation, for data to be error corrected using error correction logic 120, the cache 116 may provide data (e.g., data obtained from the memory devices 112) to error correction logic 120 to error correct that data, and, subsequently, to receive the error-corrected data from error correction logic 120. In some implementations, the cache 116 may be coupled directly to a storage device that is part of host computing device 104, like a SRAM or DRAM storage device and obtains data directly from that storage device. For example, the memory access request provided to the host interface 114 may include a memory access command that is provided to the cache to access a storage device on the host computing device 104, to obtain the data associated with the memory access request. In various implementations, the cache 116 may be a dynamic memory device, like a DRAM, and may interact with the processor 106. For example, the cache 116 may be a data cache that includes or corresponds to one or more cache levels of L1, L2, L3, L4 (e.g., as a multi-level cache), or any other cache level. In the context of a read operation, the data retrieved from the memory devices 112 may be stored at the cache 116 (e.g., in a buffer or queue) such that the error correction logic 120 error corrects the data as part of a read operation in the memory access request.

Concurrent to any address translation of a memory address and/or error correction of data associated with the memory access request, memory controller 102 may utilize the memory address as an initialization vector for an authenticated stream cipher to generate an access code, e.g., responsive to receiving the command and/or the address. Upon the processor 106 obtaining the memory access request, the authentication logic 108 may use the memory address as an initialization vector (IV) for an authenticated stream cipher. For example, the authentication logic 108 may include an AES-Galois-Counter Mode (AES-GCM) pipeline, such that the authentication logic 108 generates an access code based on the authenticated stream cipher using the memory address as the IV. The GCM generates an authentication tag for the encrypted access code using an underlying key (e.g., a DEK) and the memory address as the IV. While AES-GCM is described in some examples, it is to be understood that other authenticated stream ciphers may also be used.

In the context of a write operation within the memory access request, the generated access code is combined with data to generate ciphertext to be written to the memory devices 112. For example, combining the generated access code with the plaintext data of the memory access request may include combining the plaintext data and the generated access code as part of an XOR-operation using the authentication logic 108. For example, the authentication logic 108 may implement XOR logic to combine the plaintext data and the generated access code. In combining the access code and the plaintext data, the authentication logic 108 may encrypt the plaintext data as the ciphertext data for performing the write operation with that ciphertext. Moreover, the authentication logic 108 may utilize GCM to generate an authentication tag to be associated with the ciphertext, e.g., for authenticating the data upon later retrieval as plaintext. To generate the authentication tag, the authentication logic 108 may combine the ciphertext with itself, e.g., as part of another XOR-operation. The authentication tag and/or access code may be stored in the cache 116 by the processor 106. Accordingly, the encrypted access code may be used to provide authenticated access between the memory controller 102 and data associated with the memory access request. Accordingly, data written by a host computing device 104 to various memory devices 112 may be accessed by authentication, e.g., using the generated access code that is encrypted by a stream cipher based on the memory address associated with that data. Advantageously, the generated access code may provide security for the data written by the computing device to that specific memory address of one of the memory devices. In various implementations of performing a write operation, the authentication logic 108 may use error corrected data as stored in cache 116 or provided by the error correction logic 120. Accordingly, the plaintext data to be combined with the generated access code may be the error-corrected data. Advantageously, error correction by error correction logic 120, which may be performed subsequent to address translation for a write operation using translation logic 110, may improve processing speed of memory access requests at the memory controller 102; while the memory controller 102 also generates the encrypted access code, thereby improving processing speed of memory access requests at a memory controller 102. For example, because encrypting an access code may incur a specific latency, depending on the authenticated stream cipher utilized (e.g., an AES-GCM pipeline), error correction of the data to be written in the memory access request may also be performed in parallel, or at least partially in parallel, to that encryption of the access code.

Optionally and alternatively, for a write operation, the data may be error corrected by the error correction logic 120 after the authentication logic 108 generates the ciphertext to be written to at least one of the memory devices 112.

In the context of a read operation within the memory access request, the generated access code is combined with ciphertext data, read from one of the memory devices 112, to generate plaintext data, responsive to the memory access request. For example, combining the generated access code with the ciphertext data, read from one of the memory devices 112, may include combining the ciphertext data and the generated access code as part of an XOR-operation using the authentication logic 108. For example, the authentication logic 108 may implement an XOR to combine the ciphertext data and the generated access code. In combining the access code and the ciphertext data, the authentication logic 108 may decrypt the ciphertext data as the plaintext data requested, for performing the read operation, Moreover, the GCM of the authentication logic 108, may also retrieve an authentication tag associated with the ciphertext, e.g., to authenticate the data as plaintext data requested. The authentication logic 108 may combine the ciphertext with itself, e.g., as part of another XOR-operation, to compare the result of that XOR operation with a stored authentication tag. In the example, the stored authentication tag for the requested data may have been stored in the cache 116 by the processor 106. Accordingly, the encrypted access code may be used to provide authenticated access between the memory controller 102 and data associated with the memory access request. Accordingly, data. read by a host computing device 104 from various memory devices 112 may he accessed by authentication, e.g., using the generated access code that is encrypted by a stream cipher based on the memory address associated with that data. Advantageously, the generated access code may provide security for the data read by the computing device from a specific memory address. In various implementations of performing a read operation, the authentication logic 108 may provide the plaintext data to the cache 116 such that the plaintext data may be error corrected by error correction logic 120 or directly to error correction logic 120 for error correction. Advantageously, error correction by error correction logic 120, which may be performed prior to address translation using translation logic 110 for a read operation, may improve processing speed of memory access requests at the memory controller 102. The memory controller 102 also generates the encrypted access code, which may improve processing speed of memory access requests at the memory controller 102. For example, error correction may be performed at least in part during the latency incurred by the encrypting of an access code.

Optionally and alternatively, for a read operation, the data may be error corrected by the error correction logic 120 prior to the authentication logic 108 decrypting the ciphertext and authenticating the plaintext data. In the example, the ciphertext data to be combined with the generated access code may be error-corrected ciphertext data.

In some implementations, when receiving the one or more memory access requests for the memory devices 112 at the processor 106, the processor 106 may route or store at least a portion of the one or more memory access requests in a queue or buffer(s) (e.g., request, processing, or data buffers) at the cache 116. Data to be error corrected at error correction logic 120 may be stored in a data buffer at the cache 116. Additionally or alternatively, the memory access requests may be stored in a queue or a buffer for processing by the processor 106 and/or portions of processing the memory access requests may be stored in a processing buffer. For example, a processor 106 may identify, based on the memory access request, that the memory address of the memory access request is to be stored in a NAND device. To store the data in the NAND device, the processor 106 may first control a NAND memory device of the memory devices 112 to erase data at the physical address (e.g., the memory address as translated by the translation logic 110). Accordingly, the processor 106 may store, in a processing buffer, the write operation to be executed, subsequent to processing of the erase operation.

In operation, responsive to the one or more memory access requests including a read operation, the memory devices 112 provide access to the requested data, such that the read data, as plaintext data, is provided to the host computing device 104 via the host bus 122 from the memory controller 102. The memory interface 118 may provide the data through the memory buses 124 and an internal memory controller bus between the memory interface 118 and the cache 116, e.g., to be stored in the cache 116 for access by authentication logic 108 (e.g., to decrypt read ciphertext data); and/or for access by error correction logic 120 (e.g., to error correct read data prior to ciphertext decryption or error correct after decryption as plaintext data). Accordingly, the cache 116 may obtain the requested data from the memory devices 112 and their respective memory buses 124. Thus, the memory controller 102 facilitates performing the read operation using an encrypted access code to read the data as plaintext from cache 116, e.g., after decrypting the ciphertext data and/or error correcting the ciphertext data.

In operation, responsive to a write operation, the memory devices 112 may provide access to the requested data. The requested data may be provided, as ciphertext data, from the memory interface 118 to the memory devices 112. The memory interface 118 may provide the ciphertext through the memory buses 124, e.g., from the cache 116, where it was stored from authentication logic 108 (e.g., encrypted plaintext data to be written as ciphertext data); and/or from error correction logic 120 (e.g., error corrected plaintext data prior to encryption as ciphertext or error corrected after encryption as ciphertext data). Accordingly, the cache 116 may provide the requested data to be written to the memory devices 112 via their respective memory buses 124. Thus, the memory controller 102 may facilitate performing write operations using an encrypted access code to write the data as ciphertext from cache 116, e.g., after encrypting the plaintext data and/or error correcting the plaintext data.

Advantageously, in contrast to a memory controller which may error correct data of memory access requests and encrypt access codes in sequence, the systems and methods described herein improve processing speed of memory access requests at a memory controller 102 because error correcting and generating of access codes may occur at least partially in parallel (e.g., overlap).

In the examples described herein, the memory devices 112 may be non-volatile memory devices, such as a NAND memory device, or volatile memory devices. Generally, volatile memory may have some improved characteristics over non-volatile memory (e.g., volatile memory may be faster). The memory devices 112 may also include one or more types of memory, including but not limited to: DRAM, SRAM, triple-level cell (TLC) NAND, single-level cell (SLC) NAND, SSD, or 3D XPoint memory devices. Data stored in or data to be accessed from the memory devices 112 may be communicated via the memory buses 124 from the memory controller 102. For example, the memory buses 124 may be PCIe buses that operate in accordance with an NVMe protocol.

In example implementations, the processor 106 may include any type of microprocessor, central processing unit (CPU), ASIC, digital signal processor (DSP) implemented as part of a field-programmable gate array (FPGA), a system-on-chip (SoC), or other hardware. For example, the processor 106 may be implemented using discrete components such as an application specific integrated circuit (ASIC) or other circuitry, or the components may reflect functionality provided by circuitry within the memory controller 102 that does not necessarily have a discrete physical form separate from other portions of the memory controller 102. Portions of the processor 106 may be implemented by combinations of discrete components. For example, the translation logic 110 may be implemented as an ASIC, while the authentication logic 108 may be implemented as an FPGA with various stages in a specified configuration. Although illustrated as a component within the memory controller 120 in FIG. 1A, the processor 106 may be external to the memory controller 102 or have a number of components located within the memory controller 102 and a number of components located external to the memory controller 102.

In various implementations, memory controller 102 may be an NVMe memory controller, which may be coupled to the host computing device 104 via the host bus 122. The host bus 122 may be implemented as a PCIe bus operating in accordance with an NVMe protocol. The memory buses 124 may be NVMe buses in examples operating in accordance with an NVMe protocol. For example, in such implementations, the memory devices 112 may be implemented using NAND memory devices, which are coupled to the NVMe memory controller 102 via respective PCIe buses operating in accordance with an NVMe protocol. Accordingly, the memory buses 124 may be referred to as NVMe memory buses. In comparison to memory systems which may access NAND memory devices via a single host bus coupled to a host computing device 104, the system 100, advantageously, may increase the rate and amount of processing by the number of NVMe memory buses 124 connected to respective memory devices 124. Accordingly, in embodiments where the processor 106 is a FPGA, the system 100 may be referred to as “accelerating” memory access and storage, as system 100 increases availability of data transfer over the memory buses 124.

Additionally or alternatively, the memory controller 102 may be an NVDIMM memory controller, which is coupled to the host computing device 104 via the host bus 122. The host bus 122 may operate in accordance with an NVDIMM protocol, such as NVDIMM-F, NVDIMM-N, NVDIMM-P, or NVDIMM-X. For example, in such implementations, the memory devices 112 may be NAND memory devices or 3D XPoint memory devices. Accordingly, in such implementations, the memory devices 112 may operate as persistent storage for the cache 116, which may be a volatile memory device and/or operate as persistent storage for any volatile memory on the memory controller 102 or the host computing device 104.

FIG. 1B is a schematic illustration of a memory system interacting in accordance with examples described herein. FIG. 1B is a schematic illustration of a memory system interacting in accordance with examples described herein, In FIG. 1B, similarly-named elements may have analogous operation or function as described with respect to FIG. 1A. For example, translation logic 128 may operate similarly to translation logic 110. As described with respect to FIG. 1A, discrete components of the processor 106 in the memory controller 102 may be implemented via different types of circuitries. Accordingly, in the context of FIG. 1B, the translation logic 128 may be implemented as an ASIC, while the authentication logic 134 may be implemented as an FPGA with various stages in a specified configuration, e.g., stage 1 136, stage 2 138, and stage n 140, where n may be any number of stages capable of being included in an FPGA architecture.

A host computing device 104 may provide a memory write request 126 to a memory controller 102 to write data to a memory device 148 (e.g., one of the memory devices 112). For example, the memory write request may be or include a write command and an address associated with the write command. In the example implementation of the memory controller 102, the memory write request 126 may be routed to the processor 106 via the host bus 122. Thus, at least partially concurrently, the memory write request 126 comprising a memory address and data to be written may be obtained at translation logic 128 of the memory controller 102, while the memory address may be obtained at the authentication logic 134. Accordingly, different aspects of the memory write request 126 may be processed in the memory controller 102 at least partially concurrently. In the context of memory write request 126, the data to be written may be referred to as plaintext 132 as it will be encrypted in accordance with a generated access code.

Continuing in the processing of the memory write request 126, once obtained at translation logic 128, the translation logic 128 translates a logical memory address to a physical memory address of the memory device 148, After the memory address of memory write request 126 is translated, the data to be written itself of the memory write request 126 may be, optionally, error corrected at error correction logic 130. In some implementations, instead of error correction of the plaintext data to be written after the translation logic 128, the error correction may occur at error correction logic 146 with respect to the ciphertext 144. Accordingly, because error correction may occur either before or after encryption, error correction logic 130 and error correction logic 146 are optional some point in the implementation of the memory controller 102 shown in FIG. 1B (being depicted as dotted). Additionally or alternatively, in some implementations, both error correction logic 160 and error correction logic 176 may be included: the error correction logic 130 may error correct the plaintext 132 to be written, while the error correction logic 146 may error correct the generated authentication tag 152.

Continuing in the implementation of memory controller 102 depicted in FIG. 1B, at least partially concurrently, the obtained memory address at authentication logic 134 may be processed at various stages of authentication logic 134. For example, stage 1 136, stage 2 138, and stage n 140 may represent stages of an AES-GCM pipeline in which the memory address is encrypted and generated as an access code for the plaintext 132 to be written to the memory device 148. For example, the authentication logic 134 may use the memory address as an IV for an authenticated stream cipher, such that the authentication logic 134 generates an access code based on the authenticated stream cipher using the memory address as the IV. Once generated, an XOR logic unit 142 may combine the plaintext 132 data and the generated access code. For example, the combination may be an XOR-operation among inputs of the plaintext 132 and the generated access code. In combining the access code and the plaintext data, the XOR logic unit 142 may encrypt the plaintext 132 as ciphertext 144. While an XOR operation is described with reference to FIG. 1B, other combination operations may be used in other examples.

Once encrypted as ciphertext 144, another XOR logic unit 150 may combine the ciphertext 144 with itself to generate an authentication tag 152. The authentication tag 152 may be associated with the ciphertext 144 (e.g., in a look-up table at the cache 116), such that the authentication tag 152 may authenticate the ciphertext 144 data when read from the memory device 148. While an XOR operation is described with reference to FIG. 1B, other combination operations may be used in other examples.

In the implementation depicted, the ciphertext 144 is written to the memory device 148 and may be accessed by authentication, e.g., using the generated access code that is encrypted by a stream cipher based on the memory address associated with that data. Accordingly, a memory write request 126 may be implemented in the memory controller 102 such that aspects of accessing memory and generating an encrypted access code is performed at least partially concurrently. In sonic implementations, advantageously, the latency of the different aspects of processing the memory write request 126 may be split such that the XOR logic unit 142 operation that encrypts the plaintext 132 as ciphertext 144 incurs less latency (e.g., a single clock latency). As an example, processing the memory write request 126 at translation logic 128 and error correction logic 130 may incur a fourteen (14) clock latency; and there may be n=14 stages of the AES-GCM pipeline implemented in the authentication logic 134 (e.g., stage n 140 is stage 14). In such a case, the plaintext 132 and generated access code may be combined at the XOR logic unit 142 without further latency. Advantageously, if the processing the memory write request 126 at translation logic 128 and error correction logic 130 incurs more than a fourteen (14) clock latency, additional latency may introduced to the combining of the XOR logic unit 142 so that the generated access code may be processed when the plaintext 132 is ready for combining at the XOR logic unit 142. For example, a single clock latency at the XOR logic unit 142 may be incurred (e.g., the generated access code being passed through a delay unit) so that the inputs to the XOR logic unit 142 are received concurrently.

FIG. 1C is a schematic illustration of a memory system interacting in accordance with examples described herein. FIG. 1C is a schematic illustration of a memory system interacting in accordance with examples described herein. In FIG. 1C, similarly-named elements may have analogous operation or function as described with respect to FIG. 1A. For example, translation logic 156 may operate similarly to translation logic 110. As described with respect to FIG. 1A, discrete components of the processor 106 in the memory controller 102 may be implemented via different types of circuitries. Accordingly, in the context of FIG. 1C, the translation logic 156 may be implemented as an ASIC, while the authentication logic 164 may be implemented as an FPGA with various stages in a specified configuration, e.g., stage 1 166, stage 2 168, and stage n 170, where n may be any number of stages capable of being included in an FPGA architecture.

A host computing device 104 may provide a memory read request 154 to a memory controller 102 to read data from the memory device 158 (e.g., one of the memory devices 112). For example, the memory read request may be or include a read command and an address associated with the read command. In the example implementation of the memory controller 102, the memory read request 154 may be routed to the processor 106 via the host bus 122. Thus, at least partially concurrently, the memory read request 154 comprising a memory address may be obtained at translation logic 156 of the memory controller 102, while the memory address may be obtained at the authentication logic 164. Accordingly, different aspects of the memory read request 154 may be processed in the memory controller 102 at least partially concurrently. In the context of memory read request 154, the data read from the memory device 158 may be referred to as ciphertext 162 as it will be decrypted in accordance with a generated access code.

Continuing in the processing of the memory read request 154, once obtained at translation logic 156, the translation logic 156 translates a logical memory address to a physical memory address of the memory device 158. After the memory address of memory read request 154 is translated, the data to be written itself of the memory read request 154 may be, optionally, error corrected at error correction logic 160. In some implementations, instead of error correction of the plaintext data to be read after the translation logic 156, the error correction may occur at error correction logic 176 with respect to the plaintext 174. Accordingly, because error correction may occur either before or after decryption, error correction logic 160 and error correction logic 176 are optional some point in the implementation of the memory controller 102 shown in FIG. 1B (being depicted as dotted). Additionally or alternatively, in some implementations, both error correction logic 160 and error correction logic 176 may be included: the error correction logic 160 may error correct the ciphertext 162 that was read, while the error correction logic 176 may error correct the authentication tag 180 that was written or retrieved from a cache on the memory controller 102.

In some implementations, once read from the memory device 158, the ciphertext 162 may be associated with an authentication tag 180 that was stored in a cache (e.g., cache 116 of the memory controller 102) and associated with the memory address that was read. For example, the cache 116 may store an authentication tag alongside the logical memory address of the memory read request 154 in a look-up table of the cache. Accordingly, the ciphertext 162 may be associated with a stored authentication tag such that both are processed as an input to the XOR logic unit 172.

Continuing in the implementation of memory controller 102 depicted in FIG. 1C, at least partially concurrently, the obtained memory address at authentication logic 164 may be processed at various stages of authentication logic 164. For example, stage 1 166, stage 2 168, and stage n 170 may represent stages of an AES-GCM pipeline in which the memory address is encrypted and generated as an access code for the ciphertext 162 read from the memory device 158. For example, the authentication logic 164 may use the memory address as an IV for an authenticated stream cipher, such that the authentication logic 164 generates an access code based on the authenticated stream cipher using the memory address as the IV. Once generated, an XOR logic unit 172 may combine the ciphertext 162 data and the generated access code. For example, the combination may be an XOR-operation among inputs of the ciphertext 162 and the generated access code. In combining the access code and the plaintext data, the XOR logic unit 172 may decrypt the ciphertext 162 as plaintext 174. While an XOR operation is described with reference to FIG. 1C, other combination operations may be used in other examples.

Once decrypted as plaintext 174, another XOR logic unit 178 may combine the ciphertext 162 with itself to generate an authentication tag 180. While an XOR operation is described with reference to FIG. 1C, other combination operations may be used in other examples. That authentication tag 180 is compared with the aforementioned stored authentication tag to determine if they match each other. If the stored authentication tag matches the authentication tag 180, the memory controller 102 may authenticate the plaintext 174 to be read from the memory device 158, such that it may be provided to an external computing device (e.g., a host computing device 104).

In the implementation depicted, the plaintext 174 is read from the memory device 158 and may be accessed by authentication, e.g., using the generated access code that is encrypted by a stream cipher based on the memory address associated with that data. Accordingly, a memory read request 154 may be implemented in the memory controller 102 such that aspects of accessing memory and generating an encrypted access code is performed at least partially concurrently. In some implementations, advantageously, the latency of the different aspects of processing the memory read request 154 may be split such that the XOR logic unit 172 operation that decrypts the ciphertext 162 as plaintext 174 incurs less latency (e.g., a single clock latency). As an example, processing the memory read request 154 at translation logic 156 and authentication logic 164 may incur a fourteen (14) clock latency; and there may be n=14 stages of the AES-GCM pipeline implemented in the authentication logic 164 (e.g., stage n 140 is stage 14). In such a case, the ciphertext 162 and generated access code may be combined at the XOR logic unit 172 without further latency. Advantageously, if the processing the memory read request 154 at translation logic 156 and error correction logic 176 incurs more than a fourteen (14) clock latency, additional latency may introduced to the combining of the XOR logic unit 172 so that the generated access code may be processed when the ciphertext 162 is ready for combining at the XOR logic unit 172. For example, a single clock latency at the XOR logic unit 172 may be incurred (e.g., the generated access code being passed through a delay unit) so that the inputs to the XOR logic unit 172 are received concurrently.

FIG. 2 is a schematic illustration of a method 200 in accordance with examples described herein. Example method 200 may be performed using, for example, a processor 106 that executes executable instructions to interact with the memory devices 112 via respective memory buses 124. All or portions of the method 200 may be implemented using authentication logic and/or translation logic 110. For example, the operations described in blocks 202-210 may be stored as computer-executable instructions in a computer-readable medium accessible by processor 106. In an implementation, the computer-readable medium accessible by the processor 106 may be one of the memory devices 112. For example, the executable instructions may be stored on one of the memory devices 112 and retrieved by a memory controller 102 for the processor 106 to execute the executable instructions for performing the method 200. Additionally or alternatively, the executable instructions may be stored on a memory coupled to the host computing device 104 and retrieved by the processor 106 to execute the executable instructions for performing the method 200.

The method 200 may start in block 202. In block 202, the method may include obtaining, from a host computing device, a memory access request associated with a plurality of memory devices. The memory access request may be or include a command and a memory address. Accordingly, block 202 may include receiving, from a host computing device, a command and address for one or more memory devices. In the example implementation of the memory controller 102, a memory access request is received via host bus 122, e.g., from a host computing device 104. For example, the host bus 122 may be a PCIe bus that couples the processor 106 to the host computing device 104, such that the host computing device 104 may provide data to the processor 106 from a user application, executing on a host processor, which generates memory access requests. Accordingly, in various implementations of memory access requests including read or write operations for memory devices 112, at block 202, the processor 106 Obtains the memory access request associated with the memory devices 112.

Block 202 may be followed by block 204. In block 204, the method may include, responsive to a memory access request, performing address translation to translate a logical memory address in the memory access request to a physical memory address. In the example implementation of the memory controller 102, the translation logic 110 may use a look-up table (e.g., a block table) to translate the memory address, as a logical memory address, to a physical memory address of one of the memory devices 112. In performing the address translation, the translation logic 110 may also perform operations associated with address translations of a memory controller 102, such as memory wear leveling, garbage collecting, and/or write amplifying.

Block 204 may be followed by block 206. In block 206, the method may include performing error correction on data associated with a memory access request to generate error-corrected data, e.g., responsive to the command and/or the address. In the example implementation of the memory controller 102, the cache 116 may provide the data (e.g., in a write operation) or obtain data (e.g., in a read operation) from the memory devices 112 to provide that data to the error correction logic 120 for error correction. The error correction logic 120 may error correct that provided data, and, subsequently, to provide that error corrected data from the error correction logic 120 to the cache 116. After error correction of plaintext data, in the case of some write operations, or ciphertext data in the case of some read operations, the memory controller 102 may use the error corrected data, to either encrypt or decrypt with a generated access code, the data to be written or read, respectively.

Blocks 204 and/or 206 may occur at least partially concurrently with block 208. In block 208, the method includes, utilizing the memory address as an initialization vector for an authenticated stream cipher to generate an access code, e.g., responsive to the command and/or the address. For example, operation of block 208 may be at least partially concurrent with either or both of blocks 204 and 206, such that address translation of a memory address or error correction of data may be performed in parallel to encryption of an access code. In the example implementation of the memory controller 102, the processor 106 utilizes authentication logic 108 to use the memory address as an initialization vector (IV) for an authenticated stream cipher. For example, the authentication logic 108 may have a Galois-Counter Mode to generate the access code with a stream cipher, using an AES encryption, such that the access code generated is also encrypted.

Blocks 206 and 208 may be followed by block 210. In block 210, the method includes performing a memory access operation associated with the memory access request using the access code. In the context of a read operation as the memory access operation, the memory devices 112 provide access to the requested data, such that the read data, as plaintext data, is provided to the host computing device 104 via the host bus 122 from the memory controller 102. In the context of a write operation as the memory access operation, the memory devices 112 provide access to the requested data, such data to be written, as ciphertext data, is provided from the memory interface 118 to the memory devices 112. Accordingly, block 210 includes performing a memory access operation associated with a command—whether read, write, activate, or refresh—using the access code. In an example implementation of the processor 106, once an access code is generated by authentication logic 108, the processor 106 executes an executable instruction to provide memory access requests to/from the memory devices 124. In providing the memory access requests, the processor 106 may include information in the at least one memory access requests for a memory controller (e.g., memory controller 102) to identify which memory devices 112 the at least one memory access requests are to be provided. For example, the processor 106 may include in (e.g., as header info) each at least one memory access request a physical memory address, and/or a memory device identification associated with the requested data. For example, the header info may be included in a command. The method 200 may end after completion of the block 210.

The blocks included in the described example method 200 are for illustration purposes. In some embodiments, these blocks may be performed in a different order. In some other embodiments, various blocks may be eliminated. In still other embodiments, various blocks may be divided into additional blocks, supplemented with other blocks, or combined together into fewer blocks. For example, with respect to block 206, for a write operation, performing error correction on data associated with the memory access request may not be performed until after block 210, e.g., the data may be error corrected by the error correction logic 120 after the authentication logic 108 generates the ciphertext to be written to at least one of the memory devices 112. Other variations of these specific blocks are contemplated, including changes in the order of the blocks, changes in the content of the blocks being split or combined into other blocks, etc.

FIG. 3 is a schematic illustration of a method 300 in accordance with examples described herein. Example method 300 may be performed using, for example, a processor 106 that executes executable instructions to interact with the memory devices 112 via respective memory buses 124. In some examples, all or portions of method 300 may be implemented by the authentication logic 108 and/or translation logic 110. For example, the operations described in blocks 302-308 may be stored as computer-executable instructions in a computer-readable medium accessible by processor 106. In an implementation, the computer-readable medium accessible by the processor 106 may be one of the memory devices 112. For example, the executable instructions may be stored on one of the memory devices 112 and retrieved by a memory controller 102 for the processor 106 to execute the executable instructions for performing the method 300. Additionally or alternatively, the executable instructions may be stored on a memory coupled to the host computing device 104 and retrieved by the processor 106 to execute the executable instructions for performing the method 300.

Example method 300 may begin with block 302 that start execution of the method and includes obtaining, from a host computing device, a memory read request associated with a plurality of memory devices, the memory read request may be or include a read command and a memory address. Accordingly, block 302 may include receiving, from a host computing device, a read command and address for one or more memory devices. In the example implementation, block 302 may be performed analogously as block 202 of method 200. For example, in an implementation of the memory controller 102, a memory read request is obtained via host bus 122, e.g., from a host computing device 104.

Block 302 may be followed by block 304. In block 304, the method includes, responsive to memory read request, reading, at the memory address, data associated with the memory read request as ciphertext, e.g., responsive to the read command and/or the address. In the example implementation, block 302 may be performed analogously as blocks 204 and/or block 206 of method 200. Accordingly, in an example implementation of the memory controller 102, block 302 may include performing address translation using the memory read request to translate a logical memory address of the memory address to a physical memory address and performing error correction on data associated with the memory access request to generate error-corrected data. For example, the memory controller 102 may utilize address translation logic 110, and the cache 116 may obtain data from the memory devices 112, based on the translated physical address; to provide that data to the error correction logic 120 for error correction.

Block 304 may occur at least partially concurrently with block 306. In block 306, the method further includes utilizing the memory address as an initialization vector for an authenticated stream cipher to generate an access code, e.g., responsive to the read command and/or the address. In the example implementation, block 304 may be performed analogously as block 208 of method 200, For example, operation of block 306 may be at least partially concurrent with block 304, such that address translation of a memory address or error correction of data may be performed in parallel to encryption of an access code. The processor 106 may utilize authentication logic 108 to use the memory address of the memory read request as an initialization vector (IV) for an authenticated stream cipher, such that an access code is generated to be combined with the data that was read from memory devices 112.

Blocks 304 and 306 may be followed by block 308. In block 308, the method further includes performing the read operation associated with the memory read request using the access code to read the data as plaintext. In the example implementation, block 308 may be performed analogously as block 210 of method 200. For example, the generated access code is combined with ciphertext data, read from one of the memory devices 112, to generate plaintext data, responsive to the memory read request. Combining the generated access code with the ciphertext data, read from one of the memory devices 112, may include combining the ciphertext data and the generated access code as part of an XOR operation in the authentication logic 108. Thereby, the memory devices 112 provide access to the requested data, such that the read data, as plaintext data, is provided to the host computing device 104 via the host bus 122 from the memory controller 102. Accordingly, block 308 includes performing a read operation associated with a read command using the access code. The method 300 may end after completion of the block 308.

The blocks included in the described example method 300 are for illustration purposes. In some embodiments, these blocks may be performed in a different order. In some other embodiments, various blocks may be eliminated. In still other embodiments, various blocks may be divided into additional blocks, supplemented with other blocks, or combined together into fewer blocks. For example, with respect to block 304, performing error correction on data associated with the memory read request to generate error-corrected data may not be performed until after block 308, e.g., the data read may not be provided to error correction logic 120 to error correct until after decryption as plaintext data. Other variations of these specific blocks are contemplated, including changes in the order of the blocks, changes in the content of the blocks being split or combined into other blocks, etc.

FIG. 4 is a schematic illustration of a method 400 in accordance with examples described herein. Example method 400 may be performed using, for example, a processor 106 that executes executable instructions to interact with the memory devices 112 via respective memory buses 124. In some examples, the method 400 may be wholly or partially implemented by authentication logic 108 and/or translation logic 110. For example, the operations described in blocks 402-408 may be stored as computer-executable instructions in a computer-readable medium accessible by processor 106. In an implementation, the computer-readable medium accessible by the processor 106 may be one of the memory devices 112. For example, the executable instructions may be stored on one of the memory devices 112 and retrieved by a memory controller 102 for the processor 106 to execute the executable instructions for performing the method 400. Additionally or alternatively, the executable instructions may be stored on a memory coupled to the host computing device 104 and retrieved by the processor 106 to execute the executable instructions for performing the method 400.

Example method 400 may begin with block 402 that start execution of the method and includes obtaining, from a host computing device, a memory write request associated with a plurality of memory devices, the memory write request may be or include a write command and a memory address. Accordingly, block 402 may include receiving, from a host computing device, a write command and address for one or more memory devices. In the example implementation, block 402 may be performed analogously as block 202 of method 200. For example, in an implementation of the memory controller 102, a memory write request is obtained via host bus 122, e.g., from a host computing device 104.

Block 402 may be followed by block 404. In block 402, the method further includes, responsive to memory write request, utilizing the memory address as an initialization vector for an authenticated stream cipher to generate an access code, e.g., responsive to the write command and/or the address. In the example implementation, block 402 may be performed analogously as block 208 of method 200. For example, concurrent operation of the following block 406 may be concurrent to block 404, such that address translation of a memory address or error correction of data may be performed in parallel to encryption of an access code. The processor 106 may execute authentication logic 108 to use the memory address of the memory write request as an initialization vector (IV) for an authenticated stream cipher, such that an access code is generated to be combined with the data to be written to memory devices 112.

Block 404 may occur at least partially concurrently with block 406. In block 406, the method further includes preparing to write, at the memory address, data, as plaintext, associated with the memory write request, e.g., responsive to the write command and/or the address. In the example implementation, block 404 may be executed analogously as blocks 204 and/or block 206 of method 200. Accordingly, in an example implementation of the memory controller 102, block 406 may include performing address translation using the memory write request to translate a logical memory address of the memory address to a physical memory address and performing error correction on data associated with the memory access request to generate error-corrected data to be written. For example, the memory controller 102 may utilize address translation logic 110, and the cache 116 may provide the data from the memory devices 112, based on the translated physical address, to the error correction logic 120 for error correction.

Blocks 404 and 406 may be followed by block 408. In block 408, the method further includes performing the write operation associated with the memory write request using the access code to write the data as ciphertext. In the example implementation, block 408 may be performed analogously as block 210 of method 200. For example, the generated access code is combined with data to generate ciphertext to be written to the memory devices 112. Combining the generated access code with the plaintext data of the memory access request may include combining the plaintext data and the generated access code as part of an XOR-operation in the authentication logic 108. Thereby, the memory devices 112 provide access to the requested data, such data to be written, as ciphertext data, is provided from the memory interface 118 to the memory devices 112. Accordingly, block 308 includes performing a write operation associated with a write command using the access code. The method 400 may end after completion of the block 408.

The blocks included in the described example method 400 are for illustration purposes. In some embodiments, these blocks may be performed in a different order. In some other embodiments, various blocks may be eliminated. In still other embodiments, various blocks may be divided into additional blocks, supplemented with other blocks, or combined together into fewer blocks. Other variations of these specific blocks are contemplated, including changes in the order of the blocks, changes in the content of the blocks being split or combined into other blocks, etc.

FIG. 5A is a schematic illustration of a memory system 500 a arranged in accordance with examples described herein. System 500 a includes a memory controller 502 and a memory device 510 obtaining a reset indication 518. The memory controller 502 obtains the reset indication 518 at authentication logic 504, and the memory device 510 obtains the reset indication 518 at the access logic 512. Upon obtaining the reset indication 518, the authentication logic 504 may generate access codes 508 for memory regions of the memory device 510 or update already-generated access codes 508. Similarly upon obtaining the reset indication 518, the access logic 512 may also generate access codes 516 for memory regions of the memory device 510 or update already-generated access codes 516. Both the authentication logic 504 and the access logic 512 use a same provisioned key to generate the respective access codes such that the access codes 508 generated by the authentication logic 504 and the access codes 516 generated by the access logic 512 are the same. During operation, the memory controller 502 may generate memory access requests that include one or more access codes 508 for memory regions implicated with the memory access requests. The memory controller may successfully access the memory regions specified in the memory access request when the access code(s) in the memory request (selected from the access codes 508) match the corresponding access code(s) for the memory regions stored at the memory device (stored as access codes 516).

In generating the access codes 508 and the access codes 516, in addition to using the provisioned key at both the memory controller 502 and the memory device 510, the authentication logic 504 and access logic 512 may obtain a count value from counter 506 or counter 514, respectively. The count value may be used in conjunction with the provisioned key to generate the access codes for the memory regions of the memory device 510. In an example implementation, the counter 506 and the counter 514 may both be set initially (e.g., in production or manufacturing) to the same count value (e.g., count value=0). Upon receiving the reset indication 518, the authentication logic 504 and access logic 512 may each obtain a count value from its respective counter 506 or counter 514, such that updated access codes 508 and access codes 516 are the same at both the memory controller 502 and the memory device 510. Advantageously, system 500 a may provide security for specific memory regions of the memory device 510 because the access codes 508 and the access codes 516 are updated periodically (e.g., based on the obtained reset indication 518) or in accordance with an updated count value from respective counter 506 or counter 514. Accordingly, if a hacker were to eavesdrop on or hack one or more of the generated access codes, other regions of the memory device 510 may remain secure, as only the discovered or hacked access codes would be compromised. Thus, the system 500 a may provide security for various memory regions of the memory device 510 while also generating access codes upon obtaining a reset indication 518 at the memory controller 502 and the memory device 510.

In various implementations, the counter 506 or counter 514 may be implemented using integrated circuits. For example, as described herein generally, counters, like counter 506 or counter 514, may be implemented using cascaded flip-flops (e.g., cascaded D flip-flops). Various types of counters may be utilized in the systems and methods described herein including, but not limited to asynchronous counters, synchronous counters, decade counters, up/down counters, ring counters, Johnson counters, cascaded counters, or modulus counters. As can be appreciated, various circuitry, logic circuits, or integrated circuits can be used to implement the counter 506 or counter 514.

FIG. 5B is a schematic illustration of a memory system 500 b arranged in accordance with examples described herein. In FIG. 5B, similarly-named elements may have analogous operation or function as described with respect to FIG. 1A. For example, translation logic 530 may operate similarly to translation logic 110. As described with respect to FIG. 1A, discrete components of the processor 106 in the memory controller 102 may be implemented via different types of circuitries, like that of processor 526 in the memory controller 524. Accordingly, in the context of FIG. 5B, the translation logic 530 may be implemented as an ASIC, while the authentication logic 528 may be implemented as an FPGA with various stages in a specified configuration. Additionally, memory device 540 and memory device 544 of FIG. 5B may operate similar to the memory devices 112 of FIG. 1A. Accordingly, memory device 540 and memory device 544 may be non-volatile memory devices, such as a NAND memory device, or volatile memory devices. The memory device 540 and memory device 544 may also include one or more types of memory, including but not limited to: DRAM, SRAM, triple-level cell (TLC) NAND, single-level cell (SLC) NAND, SSD, or 3D XPoint memory devices. Data stored in or data to be accessed from the memory device 540 and memory device 544 may be communicated via the memory buses 538 from the memory controller 524. For example, the memory buses 538 may be PCIe buses that operate in accordance with an NVMe protocol.

System 500 b includes a host computing device 520 coupled to the memory controller 524, which may control memory device 540 and/or memory device 544. Each memory device 540 and memory device 544 may include distinct regions of memory such that memory controller 524 may issue and provide memory commands to specifically access regions of the memory device 540 and memory device 544. In some implementations, the memory device 540 and memory device 544 may include a shared region of memory as accessed by the memory controller 524 such that provided memory commands from the memory controller 524 may access either of memory device 540 or memory device 544 for the same memory access request. Each memory device may include a respective access logic 546 and access logic 548 to generate access codes for regions of memory in the memory device 540 and/or memory device 544.

Memory controller 524 includes a host interface 534 which may couple to a host bus 542 for connection to the host computing device 520. The host interface 534 is coupled to and/or may be implemented using the processor 526. The processor 526 includes authentication logic 528 and translation logic 530. The host interface 534 and the processor 526 may also be coupled to the cache 536 via internal memory controller buses, for example. The processor 526 is coupled to memory device 540 and memory device 544 via memory interface 532 and respective memory buses 538. The memory interface 532 is also coupled to the cache 536, e.g., also via an internal memory controller bus.

The memory controller 524 also includes a counter 522 coupled to the processor 526 to interact with the authentication logic 528, e.g., also via an internal memory controller bus. The counter 522 may provide the authentication logic 528 a count value, for example upon obtaining a reset indication (e.g., reset indication 518) at the memory controller 524. In some implementations, the memory device 540 and memory device 544 may also obtain the count value from the counter 522, e.g., as provided from the processor 526 via the memory interface 532 and the respective memory buses 538. For example, the memory device 540 and memory device 544 may use the count value from the counter 522 rather than using a count value obtained memory device 540 or memory device 544 itself. As can be appreciated however, memory device 540 or memory device 544 may include a counter or count functionality (e.g., as implemented by transistors of the respective memory device 540 or memory device 544) to obtain count values independently of the counter 522. The memory device 540, memory device 544, and memory controller 524 may use count values to generate and/or update access codes for memory regions of the memory device 540 and/or memory device 544, e.g., similar in operation to the memory controller 502 and memory device 510 obtaining a reset indication 518 and using count values from respective counter 506 and counter 514. While described in the context of FIG. 5B as counter 522 implemented in the memory controller, the counter 522 may be one of any counters described herein (e.g., as described with reference to implementations of counter 506 or counter 514). For example, the counter 522 may be an integrated circuit distinct from the memory controller 524, but still providing a count value to authentication logic 528 for the generating of access codes by the processor 526.

Upon initialization of operation for the memory controller 524 and/or memory device 540 & memory device 544 (e.g., at boot-up or start-up), the authentication logic 528 may generate access codes for memory regions of the memory device 540 or memory device 544 based on a provisioned key that was stored in the cache 536 as part of manufacturing. For example, the provisioned key may be a disk encryption key (DEK). Similarly, the memory device 540 and/or memory device 544 may include a stored provisioned key (e.g., in a data register or volatile cache memory), which may be used to generate the same access codes upon initialization of operation for the memory device 540 or memory device 544. For example, the memory device 540 and memory device 544 may receive an initialization signal via the memory buses 538 that the memory controller 524 is being initialized for operation and thus the memory devices 540, 544 are also initialized.

To generate the access codes at the memory controller 524 and/or memory device 540 & memory device 544 (e.g., upon initialization of operation), the memory controller 524 may also identify a plurality of memory regions for which memory access requests will be processed at the memory device 540 and/or memory device 544. For example, the memory device 540 and/or memory device 544 may provide a look-up table of memory regions within each respective memory device to the cache 536. In the context of the memory device 540 or memory device 544 implemented as a NAND memory device, a memory region may correspond to one of a block, page, or cell. Other regions, including irregular regions, may also be used in other examples. Generally, the memory capacity may be divided into multiple memory regions (e.g., areas of rows and/or columns), Accordingly, in the example, if regions correspond to blocks of a NAND memory device, an access code may be generated for each block of the memory device 540 or memory device 544 based on the provisioned key and the regions of memory (e.g., the blocks of a NAND memory device). The authentication logic 528 may obtain the look-up table to identify the memory regions based on the provided look-up table, and in conjunction with the provisioned key may generate a plurality of access codes for each memory region. Similarly, the access logic 546 and/or access logic 548 may use the identified plurality of memory regions for the memory device 540 and/or memory device 544 and the provisioned key, to generate the same access codes at the memory devices 540, 544 themselves.

Upon generation of the access codes for the memory regions of the memory device 540 or memory device 544, the processor 526 may store the generated access codes at the cache 536, e.g., for comparison of the generated access codes to memory access requests, including an access code, from host computing device 520, as described herein. Additionally, in some implementations, the processor 526 may provide the generated access codes to the memory device 540 and memory device 544. For example, in implementations where the memory devices 540, 544 do not generate access codes independently (e.g., on the device itself), the processor 526 may provide the generated access codes to the memory devices 540, 544 via the memory buses 538 using the memory interface 532. The provided access codes to the memory device 540 or memory device 544 may be stored in a local cache or data register for comparison to memory commands, including an access code, from the memory controller 524.

The memory controller 524 may provide the generated access codes to the host computing device 520 via the host bus 542, such that the host computing device 520 may use the access codes in memory access requests to access memory device 540 and/or memory device 544. For example, if the host computing device 520 requests data access (e.g., to read, write, or erase) of the memory device 540 or memory device 544, a memory access request (e.g., a read, write, and/or erase command) may include an access code such that data access may be authenticated by the memory controller 524 (e.g., at authentication logic 528) and/or one or both of access logic 546 & access logic 548, As described herein, advantageously, the memory controller 524 and/or the memory devices 540, 544 may be used to provide authenticated access to specific memory regions of the memory devices 540, 544 to access data associated with the memory access request. Accordingly, in operation of the system 500 b, data read or written may only be accessed in accordance with the access codes, similar to a cryptographic key for the data read or written, for memory regions of the memory devices 540, 544.

In an example implementation of the host computing device 520 providing a memory access request including at least a memory address and an access code (e.g., at least one of a plurality provided by the memory controller 524), the host computing device 520 may provide the memory access request to the host interface 534 via the host bus 542. Upon obtaining one or more memory access requests for the memory device 540 or memory device 544 at the processor 526, the memory controller 524 may implement the processor 526 to process the memory access request such that the memory address of the memory access request is routed to translation logic 530 for translation of the memory address. The processor 526 may also route an access code of the memory access request to the cache 536 for comparison of the access code to stored access codes (e.g., generated access codes for regions of the memory device 540 or memory device 544). In the example, the authentication logic 528 of the memory controller 524 may compare a stored access code (e.g., at the cache 536) to determine whether an access code obtained with the memory access request is a match, before performing a memory access operation associated with the memory access request. For example, the authentication logic 528 may implement the method 800 to authenticate a memory command based on a matched access code and to perform a memory access operation associated with the memory access request.

Additionally or alternatively, access logic 546 of memory device 540 and/or access logic 548 of memory device 544 may compare a stored access code (e.g., at a cache or a data register of the memory device) with the access code received in a memory access request. The comparison may be conducted before performing a memory access operation associated with the memory access request. The memory access operation may be performed by the memory device only if the access code received in the memory access request matches the access code stored at the memory device for the corresponding memory region. For example, the memory controller 524 may include an access code that was included in the memory access request as part of the memory command; such that the memory command is provided to the memory device 540 and/or memory device 544 including the access code via the memory buses 538. The access logic 546 or access logic 548 may obtain the memory command including the provided access code to implement a comparison to authenticate the memory command, For example, the access logic 546 or access logic 548 may implement the method 1000 to authenticate the memory command and to perform the memory access operation when the access code is matched to a stored access code at the memory device 540 or memory device 544.

In processing the memory access request at the processor 106 of the memory controller 102, the memory controller 102 may also perform address translation based on the memory access request including a memory address. As described, translation logic 530 may operate similarly to translation logic 110. Accordingly, the translation logic 530 may use a look-up table (e.g., a block table) to translate the memory address, as a logical memory address, to a physical memory address of one of the memory device 540 or memory device 544.

In some examples, the memory controller 524 and/or memory devices 540, 544 may obtain a reset indication (e.g., a reset indication 518). For example, the counter 522 may provide a reset indication to reset the plurality of access codes when the counter changes a count, e.g., incrementing the count by one (1). Similar in operation as described with respect to FIG. 5A, the memory controller 524 obtains a reset indication from the counter 522 at authentication logic 528; and the memory device 540 and memory device 544 obtain the reset indication at access logic 546 and access logic 548, respectively. Upon obtaining the reset indication at authentication logic 528, the authentication logic 528 may re-generate access codes for memory regions of the memory device 540 and memory device 544 to update the access codes (e.g., stored access codes in cache 536). Similarly upon obtaining the reset indication at access logic 546 and/or access logic 548, the access logic 546 and/or access logic 548 may also re-generate access codes for the memory device 540 or the memory device 544 to update the access codes. In some implementations where the memory device 540 or memory device 544 do not generate access codes independently (e.g., on the device itself), the re-generated access codes by authentication logic 528 may be provided to the memory devices 540, 544 via the memory buses 538 using the memory interface 532.

In re-generating the access codes, in addition to using the provisioned key, the authentication logic 528 may obtain a count value from the counter 522. For example, the count value may be included in the reset indication from the counter 522. Similar as described with respect to FIG. 5A, the count value may be used in conjunction with the provisioned key to re-generate the access codes for the memory regions of the memory device 540 or memory device 544. Advantageously, system 500 b may provide security for specific memory regions of the memory device 540 and/or memory device 544 because the access codes are updated periodically (e.g., based on the obtained reset indication) or in accordance with an updated count value from the counter 522. Additionally or alternatively, a reset indication may be obtained from the host computing device 520, e.g., if a user of the host computing device 520 resets access to the memory device 540 or memory device 544, In such implementations, the access codes may be re-generated as described herein, e.g., at authentication logic 528.

The memory controller 524 may be an NVDIMM memory controller, which is coupled to the host computing device 520 via the host bus 542. The host bus 542 may operate in accordance with an NVDIMM protocol, such as NVDIMM-F, NVDIMM-N, NVDIMM-P, or NVDIMM-X. For example, in such implementations, the memory device 540 and memory device 544 may be NAND memory devices or 3D XPoint memory devices. Accordingly, in such implementations, the memory device 540 and memory device 544 may operate as persistent storage for the cache 536, which may be a volatile memory device and/or operate as persistent storage for any volatile memory on the memory controller 524 or the host computing device 520.

FIG. 6 is a schematic illustration of a memory system 600 interacting in accordance with examples described herein, In FIG. 6, similarly-named elements may have analogous operation or function as described with respect to FIG. 5A or FIG. 5B. For example, counter 610 may operate similar to counter 506 or counter 522. As another example, HMAC authentication logic 606 may operate similar to authentication logic 504 or authentication logic 528. As described with respect to FIG. 5BA, discrete components of the processor 526 in the memory controller 524 may be implemented via different types of circuitries. Accordingly, in the context of FIG. 6, the translation logic 612 may be implemented as an ASIC, while the HMAC authentication logic 606 may be implemented as an FPGA with various stages in a specified configuration.

Access codes for the regions of a memory device may be generated based partly on regions of a memory device (e.g., memory device 624). Accordingly, the HMAC authentication logic 606 may utilize a provisioned key and regions of a memory device (e.g., the memory device 624 depicted as dotted outline indicating the regions are usable by the HMAC authentication logic 606). When using the provisioned key and the regions of memory alone to generate access code, the generated access codes 616 may be referred to as regional access codes. In an example, the HMAC authentication logic 606 may obtain a look-up table of regions of the memory device 624 to process the regions of memory device 624 and the provisioned key to generate regional access codes 616. Accordingly, the HMAC authentication logic 606 may utilize an HMAC algorithm, such as HMAC-SHA 256 or HMACSHA3-256, to encrypt access codes for each region of the memory regions of the memory device 624.

Continuing in the example implementation of FIG. 6, the counter 610 may provide the HMAC authentication logic 606 a count value. In various implementations, the counter 610 may provide the count value when the memory controller 602 obtains a reset indication (e.g., like FIG. 5A's reset indication 518) at the memory controller 602. In some implementations, the reset indication may be the providing of the count value itself from the counter 610. For example, the counter 610 may update its count by an increment, thereby providing a reset indication and a count value to the HMAC authentication logic 606. The regional access codes 616 that were generated may be updated by the HMAC authentication logic 606 using the regional access codes and a count value. In some implementations, updating the access codes 618 may include using the regions of memory, the provisioned key, and the count value to re-generate the access codes as the updated access codes 618. Accordingly, the HMAC authentication logic 606 may utilize an HMAC algorithm, such as HMAC-SHA 256 or HMACSHA3-256, to encrypt access codes for each region of the memory regions of the memory device 624 based on the regions of memory, the provisioned key, and/or the count value provided by the counter 610.

In an example interaction of the memory system 600, the memory controller 602 may obtain a memory write request 608 at the processor 604. The processor 604 may process the memory write request 608 including an access code, memory address, and data by providing the memory address to the translation logic 612 for translation. After translation of the memory address (e.g., a logical memory address) to a physical memory address of the memory device 624, the memory access request including at least the physical memory address and the access code may be provided to the cache 614. In the example, the data of the memory write request 608 may be stored in a data buffer while additional processing of the access code and the physical memory address by the HMAC authentication logic 606. In the example, the HMAC authentication logic 606 authenticates the access code of the memory access request by comparing the access code to a stored access code, e.g., as depicted in dotted line as stored access code==access code? 620. For example, the HMAC authentication logic 606 may implement the method 800 to authenticate a memory command based on the matched access code, to issue a memory write command 622 including the physical memory address and the data. In some implementations where the memory device 624 further authenticates the memory write command 622, the memory write command 622 may also include the access code as a provided access code for the memory device 624. Accordingly, in the system 600, the access codes 616 may be generated or updated in accordance with a HMAC using at least the provisioned key, regions of memory, and/or a count value. Advantageously, the access code may be encrypted and may be used to provide authenticated access to specific memory regions of the memory device 624 to access data associated with the memory write request 608.

FIG. 7 is a schematic illustration of a method in accordance with examples described herein. Example method 700 may be performed using, for example, a processor 526 that executes executable instructions to interact with the memory device 540 & memory device 544 (e.g., at boot-up or start-up) via respective memory buses 538. In some examples, the method 500 may be wholly or partially implemented by authentication logic 528 and/or, in conjunction with translation logic 530. For example, the operations described in blocks 702-708 may be stored as computer-executable instructions in a computer-readable medium accessible by processor 526. In an implementation, the computer-readable medium accessible by the processor 526 may be one of the memory device 540 & memory device 544. For example, the executable instructions may be stored on one of the memory device 540 & memory device 544 and retrieved by a memory controller 524 for the processor 526 to execute the executable instructions for performing the method 700. Additionally or alternatively, the executable instructions may be stored on a memory coupled to the host computing device 520 and retrieved by the processor 526 to execute the executable instructions for performing the method 700.

Example method 700 may begin with block 702 that starts execution of the method 700 and includes generating, at memory controller, a plurality of access codes, each access code for at least a respective memory region of a plurality of memory regions of a memory device based partly on a provisioned key. In an example implementation, the memory controller 524 may identify a plurality of memory regions for which memory access requests will be processed at the memory device 540 and/or memory device 544. With the regions identified and a provisioned key accessed from storage (e.g., in cache 536), the processor 526 may implement the authentication logic 528 to generate the plurality of access codes for each memory region. In an example, the authentication logic 528 may use an HMAC to generate the plurality of access codes.

Block 702 may be followed by block 704. In block 704, the method further includes storing the plurality of access codes in a cache of the memory controller, e.g., the access codes are written to the cache 536 in the memory controller 524. In the example implementation, the processor 526 may store the generated access codes at the cache 536, e.g., for comparison of the generated access codes to memory access requests, including an access code, from host computing device 520. In some implementations, block 704 may include writing the plurality of access codes to a cache coupled to the memory controller. For example, the access code may be written to a cache external to the memory controller 524, such as another cache in the memory system 500 b (not depicted) that is coupled to the memory controller 524. Such comparison may be performed by the processor 526, e.g., in executing method 800 as described herein.

Block 704 may be followed by block 706. In block 706, the method further includes providing each respective access code of the plurality of access codes to a cache of memory device. In the example implementation, the processor 526 may also provide the generated access codes to the memory device 540 and memory device 544, e.g., via the memory buses 538 using the memory interface 532. In implementations where the memory device 540 and memory device 544 implement access logic 546 or access logic 548, the provided access codes may be stored in a local cache or data register for comparison to memory commands including access codes, e.g., to authenticate a memory command. Accordingly, block 706 may include writing, via a memory bus, each respective access code of the plurality of access codes to a cache of a respective memory device. The comparison in memory device 540 or memory device 544 may be implemented when access logic 546 or access logic 548 executes method 1000.

Block 706 may be followed by decision block 708. In decision block 708, the method includes determining whether the processor 526 has obtained a reset indication to reset plurality of access codes. If the processor 526 determines that a reset indication has been obtained (e.g., like reset indication 518), then flow of the method 700 process along the “YES” route to return to block 702 where access codes are generated. For example, the access codes may be re-generated or updated based on the provisioned key, regions of memory, and/or a count value if the reset indication included a count value. In various implementations, to reset the plurality of access codes, the memory controller 524 may erase the access codes stored in the cache 536 such that the re-generated or updated access codes may be stored in the same location in the cache 536. Additionally or alternatively, a reset indication may be obtained from the host computing device 520 without a count value, indicating that a user has requested that access to the memory device 540 and memory device 544 be reset with new access codes generated. If the processor 526 determines that a reset indication has not been obtained, then the method 700 may end.

The blocks included in the described example method 700 are for illustration purposes. In some embodiments, these blocks may be performed in a different order. In some other embodiments, various blocks may be eliminated. In still other embodiments, various blocks may be divided into additional blocks, supplemented with other blocks, or combined together into fewer blocks. Other variations of these specific blocks are contemplated, including changes in the order of the blocks, changes in the content of the blocks being split or combined into other blocks, etc.

FIG. 8 is a schematic illustration of a method in accordance with examples described herein. Example method 800 may be performed using, for example, a processor 526 that executes executable instructions to interact with the memory device 540 & memory device 544 when obtaining memory access requests from a host computing device 520. In some examples, the method 800 may be wholly or partially implemented by authentication logic 528. For example, the operations described in blocks 802-808 may be stored as computer-executable instructions in a computer-readable medium accessible by processor 526. In an implementation, the computer-readable medium accessible by the processor 526 may be one of the memory device 540 & memory device 544. For example, the executable instructions may be stored on one of the memory device 540 & memory device 544 and retrieved by a memory controller 524 for the processor 526 to execute the executable instructions for performing the method 800. Additionally or alternatively, the executable instructions may be stored on a memory coupled to the host computing device 520 and retrieved by the processor 526 to execute the executable instructions for performing the method 800.

Example method 800 may begin with block 802 that starts execution of the method 800 and includes obtaining, from host computing device, a memory access request associated with a memory device, memory access request comprising memory address of the memory device and access code. In an example implementation, the host computing device 520 may provide a memory access request, including at least a memory address and an access code, to the memory controller 524, e.g., to the host interface 534 via the host bus 542. Accordingly, the processor 526 may obtain the memory access request for processing, such as translation of the memory address and authentication of the access code.

Block 802 may be followed by block 804. In block 804, the method further includes, responsive to memory write request, comparing, at authentication logic, the access code with the stored plurality of access codes in the cache of the memory controller. In an example implementation, like that of FIG. 6, the HMAC authentication logic 606 may compare stored access codes at the cache 614 with an obtained access code of the memory access request. In the context of the memory write request 608 for example, the access code may be provided to the cache 536 for comparison to the stored access codes. In various implementations, the access codes may be compared until there is a matched access code, e.g., all the bits of the stored access code match the obtained access code. Additionally or alternatively, additional comparison algorithms may be implemented by the HMAC authentication logic 606, e.g., a k-nearest neighbor algorithm (“k-nn” algorithm), where a number of stored matched codes in a bitwise dimensional space are selected as “nearest” to the obtained access code. Once a matched access code is obtained, flow of the method 800 proceeds to block 806.

Block 804 may be followed by block 806. In block 806, the method further includes authenticating a memory command based on the matched access code. In an example implementation, the processor 604 may authenticate a memory command to be issued from the memory controller 602 to a memory device (e.g., memory device 624) based on the matched access code. Similar in operation to FIG. 6, the HMAC authentication logic 606 may determine whether stored access code==access code? 620, such that upon a match, an indication is provided by the HMAC authentication logic 606 to the processor 604 that a memory command based on the memory access request may be issued by the memory controller 602 to the memory device 624. The indication may be referred to as authentication indication such that the memory controller 602 provides the memory command to the memory device 624.

Block 806 may be followed by block 808. In block 808, the method further includes, responsive to matching the access code, performing a memory access operation associated with the memory access request. In an example implementation, once the memory command is provided to the memory device 624, the memory device 624 may perform the memory access operation based on the memory access request. For example, a read, write, or erase operation may be performed by the memory device 624 with the memory device 624 interacting with the memory controller 602 to perform the memory access operation, e.g., a read operation may encompass the memory device 624 providing read data back to the memory controller 602. The method 800 may end after completion of the block 808.

The blocks included in the described example method 800 are for illustration purposes. In some embodiments, these blocks may be performed in a different order. In some other embodiments, various blocks may be eliminated. In still other embodiments, various blocks may be divided into additional blocks, supplemented with other blocks, or combined together into fewer blocks. Other variations of these specific blocks are contemplated, including changes in the order of the blocks, changes in the content of the blocks being split or combined into other blocks, etc.

FIG. 9 is a schematic illustration of a memory system arranged in accordance with examples described herein. System 900 includes a memory device 904 coupled to a memory controller 902 via a memory bus 918. The memory device 904 includes processor 906, which includes access logic 908, that couples to the memory controller 902 via the memory bus 918. The processor 906 is also coupled to input/output (I/O) control unit 910 via I/O bus 920 and coupled to control logic 912 via control bus 922. Control logic 912 interacts with other elements of the memory device 904, including memory array 914 through the data register 916 and cache register 924. The I/O control unit 910 also interacts with memory array 914, e.g., as certain control pins are enabled at the control logic 912. For example, certain control pins depicted in FIG. 9 (e.g., Eni, CE#, CLE, ALE, WE#, RE#, WP#) may receive control signals that enable operations of the I/O control unit 910 corresponding to that control pin functionality. In various implementations, the memory device 904 may be a NAND memory device, and the memory array 914 may be a NAND Flash memory array. In addition to the numbered elements of memory device 904, as will be appreciated by one of skill in the art, other features of a memory device (e.g., a NAND memory device) may be included in memory device 904, such as the various voltages available to elements of the memory device 904 (e.g., Vpp, Vrefq, Vcc, Vss, Vccq, and/or Vssq). For example, as depicted, an address register may interact with I/O control unit 910 to store and/or provide memory addresses to access at memory array 914 using a row decoder and a column decoder coupled to the memory array 914. Also as depicted, a status register may interact with I/O control unit 910 and control logic 912 to store and/or provide a status of certain memory elements in the memory device 904. And, a command register may interact with I/O control unit 910 and control logic 912 to store and/or provide a command from I/O control unit 910 to control logic 912.

The memory device 904 may obtain memory commands, including access codes for memory regions of the memory array 914, from the memory controller 902 via the memory bus 918. The memory device 904 may be similar in operation to the memory device 540 or memory device 544, in that the memory device 904 may include memory regions, such as blocks of memory array 914, pages of the memory array 914, or individual memory cells of the memory array 914. Accordingly, each obtained access code in the memory command may correspond to a specific region which may be authenticated by the memory device 904 at the access logic 908. As described with respect to FIG. 5B, the access logic 546 and/or access logic 548 may use the memory regions of the memory array 914 and a provisioned key stored in a local cache (e.g., cache register 924), to generate the same access codes at the memory device 904 as that of the generated access codes usable by the memory controller 902. For example, the access logic 908 may use an HMAC based on the provisioned key and the regions of the memory array 914 to generate the same access codes.

Access codes generated at the memory device 904 may also use a count value for generation or updating of the access codes (e.g., due to a reset indication, like reset indication 518). For example, a counter may be implemented in control logic 912 and a count value stored in the status register. In the example, as described with respect to counter 506 or counter 514, the counter may be implemented in the control logic 912 using integrated circuits, like cascaded flip-flops. The I/O control unit 910 may obtain the count value stored in the status register to provide to access logic 908 as a count value for generating access codes. For example, the access logic 908 may use an HMAC based on the provisioned key, the regions of the memory array 914, and the count value stored in the status register to generate the same access codes.

In some implementations where the memory device 904 does not generate the same access codes, the memory controller 902 may provide the generated access codes to the cache register 924 of the memory device 904. In any case, the memory device 904 may store access codes to authenticate obtained memory commands, including access codes for regions of the memory array 914. In an example implementation, like the functionality of the HMAC authentication logic 606 to compare stored access codes, the access logic 908 may compare the obtained access code of the memory command with stored access codes. For example, access codes for regions of memory array 914 may be stored in the cache register 924. As implemented by access logic 908, the obtained access code may be provided to the cache register 924 for comparison to the stored access codes. The access codes may be compared, as implemented by access logic 908, until there is a matched access code, e.g., all the bits of the stored access code match the obtained access code. Upon a matched access code, an indication is provided by the access logic 908 to the processor 906. The indication may be referred to as authentication indication such that the access logic 908 provides a memory address (e.g., a physical memory address of a location in the memory array 914) to the I/O control unit 910, while also providing a control signal indicating that the memory array 914 may be accessed to the control logic 912 via the control bus 922. Accordingly, based on that authentication indication, the access logic 908 may provide the physical memory address to the I/O control unit 910 for access to a memory region of the memory array 914, the memory region corresponding to the access code matched and obtained in the memory command from the memory controller 902.

Advantageously, the generated access code may provide security for the data read or written memory regions of the memory device 904. In the example implementation, of the generated access codes being stored in the cache register 924, the access codes may be updated periodically, e.g., if a reset indication is obtained at the memory device 904. Accordingly, if a hacker were to eavesdrop on or hack one or more of the generated access codes, other regions of memory (e.g., regions of the same memory device) may remain secure, as only the discovered or hacked access codes would be compromised. Further additionally and advantageously, system 900 may provide security for specific memory regions of the memory array 914 because the access code are updated periodically (e.g., based on obtained reset indication) or in accordance with an updated count value from a counter.

One or more control signals provided to the access logic 908 can include control signals being provided to control logic pins of the control logic 912 via the control bus 922, such as control logic pins: WE#, CLE, and/or ALE. Accordingly, the control logic 912 may obtain one or more control signals from the access logic 908 based on an obtained memory command including an access code. In an example, obtaining a control signal, at the command latch enable (CLE) pin of the control logic 912, may be indicative to the memory device 904 that a memory command has been obtained. Accordingly, the control logic 912 may activate a gate of a transistor that controls a R/B# pin output that indicates a Ready/Busy status of the memory array 914. For example, in obtaining the control signal at the CLE pin, the control logic 912 may provide a gate signal to a transistor such that the drain of the transistor (e.g., if a n-type transistor) sets to high, indicative of a Busy status at the memory array 914. Accordingly, the control logic 912, responsive to obtained one or more control signals indicative of the obtained memory command including the access code, may provide internal control signals to control various memory access circuits to perform a memory access operation (e.g., read, write, program). For example, the internal control signals may comprise one or more memory access requests to perform memory access operations. The memory access requests may include memory addresses of cells that are to be accessed in performing the memory access operations.

The various memory access circuits are used during such memory access operations, and may generally include circuits such as row and column decoders, charge pump circuits, signal line drivers, I/O control unit 910, data register 916, and cache register 924. The memory cells in the memory array 914 may be accessed through the use of various signal lines, for example, global word lines (GWLs), local word lines (LWLs), and bitlines (BLs). The memory cells may be non-volatile memory cells, such as NAND or NOR flash cells, phase change memory cells, or may generally be any type of memory cells. The memory cells may be single level cells configured to store data for one bit of data. The memory cells may also be multi-level cells configured to store data for more than one bit of data

Generally, commands, address information, and write data may be provided to the memory array 914 as sets of sequential I/O transmitted through the various buses coupling the I/O control unit 910 and the memory array 914. A DQS signal (e.g., at a DQS pin) may be used. to provide timing information for the transfer of data to the memory array 914 or from the memory array 914, An address register coupled to the I/O control unit) may be provided address information by the I/O control unit 910 to be temporarily stored.

FIG. 10 is a schematic illustration of a method in accordance with examples described herein. Example method 1000 may be performed using, for example, a processor 906 of a memory device 904 that executes executable instructions when obtaining memory commands from a memory controller 902. In some examples, the method 1000 may be wholly or partially implemented by access logic 908. For example, the operations described in blocks 1002-4006 may be stored as computer-executable instructions in a computer-readable medium accessible by processor 906, For example, the executable instructions may be stored at the memory array 914 itself and retrieved by the I/O control unit 910 for the processor 906 to execute the executable instructions for performing the method 1000.

Example method 1000 may begin with block 1002 that starts execution of the method 1000 and includes obtaining, at access logic, a memory command comprising a physical memory address and a provided access code associated with a particular memory region of a plurality of memory regions. In an example implementation, the memory device 904 may obtain memory commands, which include access codes for memory regions of the memory array 914, from the memory controller 902 via the memory bus 918. Accordingly, the processor 906 may obtain the memory command for authentication by access logic 908.

Block 1002 may be followed by block 1004. In block 1004, the method further includes comparing, at the access logic, the provided access code with the access code stored in the cache register to determine that the access code is a match. In an example implementation, the access logic 908 may compare the obtained access code of the memory command with stored access codes. For example, access codes for regions of memory array 914 may be stored in the cache register 924. The access codes may be compared, as implemented by access logic 908, until there is a matched access code. Upon a matched access code, an indication is provided by the access logic 908 to the processor 906. Once a matched access code is obtained, flow of the method 1000 proceeds to block 1006.

Block 1004 may be followed by block 1006. In block 1006, the method further includes, responsive to the match determination, providing the physical memory address to an I/O control unit coupled to memory array. In an example implementation, based on that authentication indication, the access logic 908 may provide the physical memory address to the I/O control unit 910 for access to a memory region of the memory array 914. The memory region corresponds to the access code matched (e.g., the access code obtained in the memory command from the memory controller 902). The memory region of the access code match is also the region in the memory array 914 at which the physical memory address of the memory command is accessed. Accordingly, the method 1000 may facilitate secured access to memory regions for which access codes are generated. The method 1000 may end after completion of the block 1006.

The blocks included in the described example method 1000 are for illustration purposes. In some embodiments, these blocks may be performed in a different order. In some other embodiments, various blocks may be eliminated. In still other embodiments, various blocks may be divided into additional blocks, supplemented with other blocks, or combined together into fewer blocks. Other variations of these specific blocks are contemplated, including changes in the order of the blocks, changes in the content of the blocks being split or combined into other blocks, etc.

While FIGS. 5-10 have been described in the context of generating access codes for regions of a memory device using a provisioned key and/or a count value, it can be appreciated that authentication logic of a memory controller (e.g., authentication logic 504 of the memory controller 502) or access logic of a memory device (e.g., access logic 512 of the memory device 510) can utilize additional parameters to generate access codes for memory regions of a memory device. In an example implementation using aspects of the systems and methods described with respect to FIGS. 1A-4, the authentication logic 504 may also use a memory address as an additional parameter (e.g., as an initialization vector), in conjunction with or alternatively to the provisioned key and the count value, for an authenticated stream cipher to generate access codes. For example, the authenticated stream cipher may generate a first access code to be used as the provisioned key for the memory controller 502 and the memory device 510. Accordingly, the generated access codes for the memory regions of a memory device may also be based partly on a memory address in a memory address request. In an example implementation, the memory controller 502 and the memory device 510 may use the memory address in the memory access request to generate the access codes for a specific memory access request requiring additional security, e.g., such that data to be accessed at the memory address is only accessed when the memory address itself is included in the memory access request. Accordingly, examples of the systems and methods described with respect to FIGS. 1A-4 may be used to generate access codes for memory regions of the memory device, to advantageously provide additional security as to the data accessed at specific memory addresses of a memory region in the memory device. Examples of systems and methods described with respect to FIGS. 1A-4 may be used, for example, to generate the access codes 508 and/or access codes 516 of FIG. 5A.

Certain details are set forth above to provide a sufficient understanding of described examples. However, it will be clear to one skilled in the art that examples may be practiced without various of these particular details. The description herein, in connection with the appended drawings, describes example configurations and does not represent all the examples that may be implemented or that are within the scope of the claims. The terms “exemplary” and “example” as may be used herein means “serving as an example, instance, or illustration,” and not “preferred” or “advantageous over other examples.” The detailed description includes specific details for the purpose of providing an understanding of the described techniques. These techniques, however, may be practiced without these specific details. In some instances, well-known structures and devices are shown in block diagram form in order to avoid obscuring the concepts of the described examples.

Information and signals described herein may be represented using any of a variety of different technologies and techniques. For example, data, instructions, commands, information, signals, bits, symbols, and chips that may be referenced throughout the above description may be represented by voltages, currents, electromagnetic waves, magnetic fields or particles, optical fields or particles, or any combination thereof.

The various illustrative blocks and modules described in connection with the disclosure herein may be implemented or performed with a general-purpose processor, a digital signal processor (DSP), an application-specific integrated circuit (ASIC), a field-programmable gate array (FPGA), or other programmable logic device, discrete gate or transistor logic, discrete hardware components, or any combination thereof designed to perform the functions described herein. A general-purpose processor may be a microprocessor, but in the alternative, the processor may be any conventional processor, controller, microcontroller, or state machine. A processor may also be implemented as a combination of computing devices (e.g., a combination of a DSP and a microprocessor, multiple microprocessors, one or more microprocessors in conjunction with a DSP core, or any other such configuration).

The functions described herein may be implemented in hardware, software executed by a processor, firmware, or any combination thereof. If implemented in software executed by a processor, the functions may be stored on or transmitted over as one or more instructions or code on a computer-readable medium, Computer-readable media includes both non-transitory computer storage media and communication media including any medium that facilitates transfer of a computer program from one place to another. A non-transitory storage medium may be any available medium that can be accessed by a general purpose or special purpose computer. By way of example, and not limitation, non-transitory computer-readable media can comprise RAM, ROM, electrically erasable programmable read only memory (EEPROM), or optical disk storage, magnetic disk storage or other magnetic storage devices, or any other non-transitory medium that can be used to carry or store desired program code means in the form of instructions or data structures and that can be accessed by a general-purpose or special-purpose computer, or a general-purpose or special-purpose processor.

Also, any connection is properly termed a computer-readable medium. For example, if the software is transmitted from a website, server, or other remote source using a coaxial cable, fiber optic cable, twisted pair, digital subscriber line (DSL), or wireless technologies such as infrared, radio, and microwave, then the coaxial cable, fiber optic cable, twisted pair, DSL, or wireless technologies such as infrared, radio, and microwave are included in the definition of medium. Combinations of the above are also included within the scope of computer-readable media.

Other examples and implementations are within the scope of the disclosure and appended claims. For example, due to the nature of software, functions described above can be implemented using software executed by a processor, hardware, firmware, hardwiring, or combinations of any of these. Features implementing functions may also be physically located at various positions, including being distributed such that portions of functions are implemented at different physical locations.

Also, as used herein, including in the claims, “or” as used in a list of items (for example, a list of items prefaced by a phrase such as “at least one of” or “one or more or”) indicates an inclusive list such that, for example, a list of at least one of A, B, or C means A or B or C or AB or AC or BC or ABC (i.e., A and B and C). Also, as used herein, the phrase “based on” shall not be construed as a reference to a closed set of conditions. For example, an exemplary step that is described as “based on condition A” may be based on both a condition A and a condition B without departing from the scope of the present disclosure. In other words, as used herein, the phrase “based on” shall be construed in the same manner as the phrase “based at least in part on.”

From the foregoing it will be appreciated that, although specific examples have been described herein for purposes of illustration, various modifications may be made while remaining with the scope of the claimed technology, The description herein is provided to enable a person skilled in the art to make or use the disclosure. Various modifications to the disclosure will be readily apparent to those skilled in the art, and the generic principles defined herein may be applied to other variations without departing from the scope of the disclosure. Thus, the disclosure is not limited to the examples and designs described herein, but is to be accorded the broadest scope consistent with the principles and novel features disclosed herein. 

What is claimed is:
 1. A method comprising: generating, at a memory controller comprising authentication logic, a plurality of access codes, each access code of the plurality of access codes for a respective memory region of a plurality of memory regions of a memory device of a plurality of memory devices based partly on a provisioned key; writing the plurality of access codes to a cache coupled to the memory controller; and writing, via a memory bus, each respective access code of the plurality of access codes to a cache of the memory device.
 2. The method of claim 1, further comprising: obtaining a reset indication and a count value from a counter of the memory controller o reset the plurality of access codes; responsive to the reset indication, generating , another plurality of access codes, each other access code of the other plurality of access codes for the respective memory region of the plurality of memory regions based partly on the provisioned key and the count value. in


3. The method of claim 2, further comprising: erasing the plurality of access codes from the cache of the memory controller; and storing the other plurality of access codes in the cache of the memory controller,
 4. The method of claim I, further comprising: obtaining a reset indication, from a host computing device coupled to the memory controller, to reset the plurality of access codes at the memory controller and the memory device; responsive to the reset indication, re-generating, the plurality of access codes for the plurality of memory regions of the memory device at the authentication logic to update the plurality of access codes stored at the memory controller and the memory device.
 5. The method of claim I, wherein the authentication logic comprises a hash-based message authentication code (HMAC).
 6. The method of claim 1, further comprising: obtaining, from a host computing device, a memory access request associated with the memory device of the plurality of memory devices, the memory access request comprising a memory address of the memory device and an access code; responsive to the memory access request: comparing, at the authentication logic, the access code with the stored plurality of access codes in the cache of the memory controller; and responsive to matching the access code, performing a memory access operation associated with the memory access request.
 7. The method of claim 6, wherein comparing, at authentication logic, the access code with the stored plurality of access codes in the cache of the memory controller comprises: matching the access code to one of the stored plurality of access codes; and authenticating a memory command based on the matched access code, the memory command including a physical memory address in the corresponding memory region associated with the matched access code.
 8. The method of claim 6, wherein responsive to the memory access request, translating the memory address of the memory device as a logical memory address to a physical address in the corresponding memory region associated with the matched access code based on a look-up table stored in the cache of the memory controller.
 9. The method of claim 1, further comprising: obtaining, from a host computing device, a memory access request comprising a memory address associated with one of the plurality of memory devices; and utilizing the provisioned key and the memory address as an initialization vector for an authenticated stream cipher to generate the plurality of access codes for the at least respective memory region of the plurality of memory regions of the memory device.
 10. An apparatus comprising: a memory device comprising a plurality of memory regions; a memory controller configured to control the memory device, the memory controller comprising: authentication logic configured to generate a plurality of access codes, each access code of the plurality of access codes for at least a respective memory region of the plurality of memory regions; and a cache configured to store the plurality of access codes, each access code associated with a corresponding memory region of the plurality of memory regions of the memory device; and a memory bus coupling the memory controller to the memory device, wherein the memory controller is further configured to provide, via the memory bus, memory access requests including at least one access code of the plurality of access codes.
 11. The apparatus of claim 10, wherein the memory device comprises a NAND memory device and the memory bus is configured to operate in accordance with an NVDIMM protocol.
 12. The apparatus of claim 10, wherein the authentication logic is further configured to obtain a memory access request comprising a memory address and an access code from a host computing device via a PCIe bus.
 13. The apparatus of claim 12, wherein the authentication logic is further configured to compare an access code with the plurality of access codes in the cache, and wherein, upon a match of the access code with one of the plurality of access codes in the cache, the memory controller is configured to provide the memory access request to the memory device.
 14. The apparatus of claim 10, wherein the memory controller further comprises translation logic configured to translate a memory address of memory access request to a physical memory address associated with at least one memory region of the plurality of memory regions.
 15. The apparatus of claim 14, wherein, upon a match of an access code with one of the plurality of access codes in the cache, the memory controller is further configured to provide the physical memory address and the access code, as a memory command, to an access logic of the memory device of a plurality of memory devices.
 16. The apparatus of claim 10, wherein the memory controller further comprises a. counter configured to provide a reset indication to reset the plurality of access codes when the counter changes a count.
 17. A memory comprising: a processor; a memory array; a cache register configured to store an access code for the memory array; and a non-transitory computer readable medium stored with executable instructions that, when executed by the processor, causes the memory to perform operations comprising: obtaining, at access logic, a memory command comprising a physical memory address and a provided access code associated with a particular memory region of a plurality of memory regions of a plurality of memories including the memory; comparing, at the access logic, the provided access code with the access code stored in the cache register to determine that the access code is a match; and responsive to the match determination, providing the physical memory address to an I/O control unit coupled to the memory array.
 18. The memory of claim 17, wherein the operations further comprising: obtaining, via the I/O control unit, the access code for the memory array.
 19. The memory of claim 17, wherein the memory is coupled to a memory controller via a bus configured to operate in accordance with an NVDIMM protocol.
 20. The memory of claim 17, wherein the operations further comprising: obtaining, at a control logic of the memory, a control signal indicative of the memory command.
 21. The memory of claim 20, wherein the operations further comprising: obtaining, at a command latch enable (CLE) pin of the control logic, the control signal indicative of the memory command.
 22. The memory of claim 20, wherein the operations further comprising: responsive to the match determination, obtaining, at the control logic of the memory, an additional control signal indicative that data is to be accessed at the physical memory address.
 23. The method of claim 22, wherein the operations further comprising: responsive to the additional control signal indicative, asserting a Ready/Busy (R/B) pin of the control logic. 